package MT;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;

public class MT2023_10_01 {

    /**
     * 1.
     * 淘汰分数
     * 某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛，他们的得分分别是a_1,a_2….a_n,小美作为比赛的裁判希望设定一个分数线m，使得所有分数大于m的选手晋级，其他人淘汰。
     * <p>
     * 但是为了保护粉丝脆弱的心脏，小美希望晋级和淘汰的人数均在[x,y]之间。
     * <p>
     * 显然这个m有可能是不存在的，也有可能存在多个m，如果不存在，请你输出-1，如果存在多个，请你输出符合条件的最低的分数线。
     * <p>
     * 数据范围：
     * 1
     * ≤
     * n
     * ≤
     * 50000
     * <p>
     * 1≤n≤50000 ，
     * 1
     * ≤
     * x
     * ≤
     * y
     * ≤
     * n
     * <p>
     * 1≤x≤y≤n
     * 进阶：时间复杂度
     * O
     * (
     * n
     * l
     * o
     * g
     * n
     * )
     * <p>
     * O(nlogn) ，空间复杂度
     * O
     * (
     * n
     * )
     * <p>
     * O(n)
     * 时间限制：C/C++ 1秒，其他语言2秒
     * 空间限制：C/C++ 256M，其他语言512M
     * 输入描述：
     * 输入第一行仅包含三个正整数n,x,y，分别表示参赛的人数和晋级淘汰人数区间。(1<=n<=50000,1<=x,y<=n)
     * <p>
     * 输入第二行包含n个整数，中间用空格隔开，表示从1号选手到n号选手的成绩。(1<=|a_i|<=1000)
     * <p>
     * 输出描述：
     * 输出仅包含一个整数，如果不存在这样的m，则输出-1，否则输出符合条件的最小的值。
     * <p>
     * 示例1
     * 输入例子：
     * 6 2 3
     * 1 2 3 4 5 6
     * 输出例子：
     * 3
     *
     * @param args
     */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int i = scanner.nextInt();
        int x = scanner.nextInt();
        int y = scanner.nextInt();
        int[] arr = new int[i];
        for (int j = 0; j < i; j++) {
            arr[j] = scanner.nextInt();
        }
        System.out.println(outScore(arr, x, y));
    }

    private static int outScore(int[] arr, int x, int y) {

        int length = arr.length;

        if (length < 2 * x || length > 2 * y) {
            return -1;
        }

        //  排序
        Arrays.sort(arr);

        int res = Integer.MAX_VALUE;
        // 找到符合条件的值，二分查找
        int left = 0;
        int right = length - 1;
        while (left <= right) {
            // 找到中间位置
            int mid = left + (right - left) / 2;
            int current = mid;
            while (arr[mid + 1] == arr[mid]) {
                mid++;
            }
            if (mid + 1 <= y && mid + 1 >= x && length - mid - 1 >= x && length - mid - 1 <= y) {
                res = Math.min(res, arr[mid]);
                right = current-1;
            }
            //说明左边多了，或者右边少了，那么需要缩小范围
            else if (mid + 1 > y || length - mid - 1 < x) {
                right = current - 1;
            } else {
                left = current + 1;
            }
        }

        if (res == Integer.MAX_VALUE)
            return -1;
        return res;

    }

}



